<!DOCTYPE html>
<html>
<head><meta name="generator" content="Hexo 3.8.0">
  <meta charset="utf-8">
  
  <title>Native Query Result to POJO | gdme1320 的笔记</title>
  <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
  <meta name="description" content="Table of Contents   Using Mapped Entities (JPA 2.0) Manual Mapping JPA 2.1 with @SqlResultSetMapping Using XML Mapping Transformers (Deprecated) CreateNativeQuery without type      https://stackove">
<meta property="og:type" content="article">
<meta property="og:title" content="Native Query Result to POJO">
<meta property="og:url" content="http://gdme1320.gitee.com/java/spring-jpa/native-query-to-pojo/index.html">
<meta property="og:site_name" content="gdme1320 的笔记">
<meta property="og:description" content="Table of Contents   Using Mapped Entities (JPA 2.0) Manual Mapping JPA 2.1 with @SqlResultSetMapping Using XML Mapping Transformers (Deprecated) CreateNativeQuery without type      https://stackove">
<meta property="og:locale" content="default">
<meta property="og:updated_time" content="2022-03-23T09:59:35.419Z">
<meta name="twitter:card" content="summary">
<meta name="twitter:title" content="Native Query Result to POJO">
<meta name="twitter:description" content="Table of Contents   Using Mapped Entities (JPA 2.0) Manual Mapping JPA 2.1 with @SqlResultSetMapping Using XML Mapping Transformers (Deprecated) CreateNativeQuery without type      https://stackove">
  
    <link rel="alternate" href="/atom.xml" title="gdme1320 的笔记" type="application/atom+xml">
  
  
  
    <link href="//fonts.googleapis.com/css?family=Source+Code+Pro" rel="stylesheet" type="text/css">
  

  <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" integrity="sha384-1q8mTJOASx8j1Au+a5WDVnPi2lkFfwwEAa8hDDdjZlpLegxhjVME1fgjWPGmkzs7" crossorigin="anonymous">

  <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.5.0/css/font-awesome.min.css" integrity="sha384-XdYbMnZ/QjLh6iI4ogqCTaIjrFk87ip+ekIjefZch0Y+PvJ8CDYtEs1ipDmPorQ+" crossorigin="anonymous">

  <link rel="stylesheet" href="/css/styles.css">
  <link rel="stylesheet" href="/css/docs.min.css">
  

</head>
</html>
<body>
  <nav class="navbar navbar-inverse">
  <div class="container">
    <!-- Brand and toggle get grouped for better mobile display -->
    <div class="navbar-header">
      <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#main-menu-navbar" aria-expanded="false">
        <span class="sr-only">Toggle navigation</span>
        <span class="icon-bar"></span>
        <span class="icon-bar"></span>
        <span class="icon-bar"></span>
      </button>
      
    </div>

    <!-- Collect the nav links, forms, and other content for toggling -->
    <div class="collapse navbar-collapse" id="main-menu-navbar">
      <ul class="nav navbar-nav">
        
          <li><a class href="/index.html">Home</a></li>
        
          <li><a class href="/archives/">Archives</a></li>
        
      </ul>

      <!--
      <ul class="nav navbar-nav navbar-right">
        
          <li><a href="/atom.xml" title="RSS Feed"><i class="fa fa-rss"></i></a></li>
        
      </ul>
      -->
    </div><!-- /.navbar-collapse -->
  </div><!-- /.container-fluid -->
</nav>

  <div class="container bs-docs-container">
  
    <div class="row">
        <div class="col-sm-8 blog-main">
          <article id="post-java/spring-jpa/native-query-to-pojo" class="article article-type-post" itemscope itemprop="blogPost">

  <header class="article-header">
    
  
    <h1 class="article-title" itemprop="name">
      Native Query Result to POJO
    </h1>
  


  </header>

  <div class="article-meta">
    <div class="article-datetime">
  <a href="/java/spring-jpa/native-query-to-pojo/" class="article-date"><time datetime="2022-03-23T09:59:35.419Z" itemprop="datePublished">2022-03-23</time></a>
</div>

    
    
  <div class="article-category">
    <a class="article-category-link" href="/categories/java/">java</a> / <a class="article-category-link" href="/categories/java/spring-jpa/">spring-jpa</a>
  </div>


  </div>
  <div class="article-inner">

    <div class="article-entry" itemprop="articleBody">
      
        
<div id="content">
<div id="table-of-contents">
<h2>Table of Contents</h2>
<div id="text-table-of-contents">
<ul>
<li><a href="#org19c9b30">Using Mapped Entities (JPA 2.0)</a></li>
<li><a href="#org5f39270">Manual Mapping</a></li>
<li><a href="#org6c4ab73">JPA 2.1 with @SqlResultSetMapping</a></li>
<li><a href="#org8619079">Using XML Mapping</a></li>
<li><a href="#org957bdfd">Transformers (Deprecated)</a></li>
<li><a href="#org1b16633">CreateNativeQuery without type</a></li>
</ul>
</div>
</div>
<blockquote>
<p>
<a href="https://stackoverflow.com/questions/13012584/jpa-how-to-convert-a-native-query-result-set-to-pojo-class-collection" target="_blank" rel="noopener">https://stackoverflow.com/questions/13012584/jpa-how-to-convert-a-native-query-result-set-to-pojo-class-collection</a>
</p>
</blockquote>
<p>
 SqlResultSetMapping  能将native query返回的对象映射到Entity
</p>
<p>
JPA 1.0 does not allow mapping to non-entity classes.
Only in JPA 2.1 a  ConstructorResult  has been added to map return values a java class.
</p>
<div class="outline-2" id="outline-container-org19c9b30">
<h2 id="org19c9b30">Using Mapped Entities (JPA 2.0)</h2>
<div class="outline-text-2" id="text-org19c9b30">
<p>
Using JPA 2.0 it is not possible to map a native query to a POJO, it can only be done with an entity.
</p>
<div class="org-src-container">
<pre class="src src-java"><span style="font-weight: bold; font-style: italic;">// </span><span style="font-weight: bold; font-style: italic;">in this case, Jedi, must be a mapped entity class.</span>
<span style="font-weight: bold; text-decoration: underline;">Query</span> <span style="font-weight: bold; font-style: italic;">query</span> = em.createNativeQuery(<span style="font-style: italic;">"SELECT name,age FROM jedi_table"</span>, Jedi.<span style="font-weight: bold;">class</span>);
<span style="font-weight: bold; text-decoration: underline;">@SuppressWarnings</span>(<span style="font-style: italic;">"unchecked"</span>)
<span style="font-weight: bold; text-decoration: underline;">List</span>&lt;<span style="font-weight: bold; text-decoration: underline;">Jedi</span>&gt; <span style="font-weight: bold; font-style: italic;">items</span> = (<span style="font-weight: bold; text-decoration: underline;">List</span>&lt;<span style="font-weight: bold; text-decoration: underline;">Jedi</span>&gt;) query.getResultList();
</pre>
</div>
<p>
An alternative to avoid the unchecked warning here, would be to use a named native query. So if we declare the native query in an entity
</p>
<div class="org-src-container">
<pre class="src src-java"><span style="font-weight: bold; text-decoration: underline;">@NamedNativeQuery</span>(
 name=<span style="font-style: italic;">"jedisQry"</span>, 
 query = <span style="font-style: italic;">"SELECT name,age FROM jedis_table"</span>, 
 resultClass = Jedi.<span style="font-weight: bold;">class</span>)
</pre>
</div>
<p>
Then, we can simply do:
</p>
<div class="org-src-container">
<pre class="src src-java"><span style="font-weight: bold; text-decoration: underline;">TypedQuery</span>&lt;<span style="font-weight: bold; text-decoration: underline;">Jedi</span>&gt; <span style="font-weight: bold; font-style: italic;">query</span> = em.createNamedQuery(<span style="font-style: italic;">"jedisQry"</span>, Jedi.<span style="font-weight: bold;">class</span>);
<span style="font-weight: bold; text-decoration: underline;">List</span>&lt;<span style="font-weight: bold; text-decoration: underline;">Jedi</span>&gt; <span style="font-weight: bold; font-style: italic;">items</span> = query.getResultList();
</pre>
</div>
<p>
This is safer, but we are still restricted to use a mapped entity.
</p>
</div>
</div>
<div class="outline-2" id="outline-container-org5f39270">
<h2 id="org5f39270">Manual Mapping</h2>
<div class="outline-text-2" id="text-org5f39270">
<p>
A solution I experimented a bit (before the arrival of JPA 2.1) was doing mapping against a POJO constructor using a bit of reflection.
</p>
<div class="org-src-container">
<pre class="src src-java"><span style="font-weight: bold;">public</span> <span style="font-weight: bold;">static</span> &lt;<span style="font-weight: bold; text-decoration: underline;">T</span>&gt; <span style="font-weight: bold; text-decoration: underline;">T</span> <span style="font-weight: bold;">map</span>(<span style="font-weight: bold; text-decoration: underline;">Class</span>&lt;<span style="font-weight: bold; text-decoration: underline;">T</span>&gt; <span style="font-weight: bold; font-style: italic;">type</span>, <span style="font-weight: bold; text-decoration: underline;">Object</span>[] <span style="font-weight: bold; font-style: italic;">tuple</span>){
   <span style="font-weight: bold; text-decoration: underline;">List</span>&lt;<span style="font-weight: bold; text-decoration: underline;">Class</span>&lt;?&gt;&gt; <span style="font-weight: bold; font-style: italic;">tupleTypes</span> = <span style="font-weight: bold;">new</span> <span style="font-weight: bold; text-decoration: underline;">ArrayList</span>&lt;&gt;();
   <span style="font-weight: bold;">for</span>(<span style="font-weight: bold; text-decoration: underline;">Object</span> <span style="font-weight: bold; font-style: italic;">field</span> : tuple){
      tupleTypes.add(field.getClass());
   }
   <span style="font-weight: bold;">try</span> {
      <span style="font-weight: bold; text-decoration: underline;">Constructor</span>&lt;<span style="font-weight: bold; text-decoration: underline;">T</span>&gt; <span style="font-weight: bold; font-style: italic;">ctor</span> = type.getConstructor(tupleTypes.toArray(<span style="font-weight: bold;">new</span> <span style="font-weight: bold; text-decoration: underline;">Class</span>&lt;?&gt;[tuple.length]));
      <span style="font-weight: bold;">return</span> ctor.newInstance(tuple);
   } <span style="font-weight: bold;">catch</span> (<span style="font-weight: bold; text-decoration: underline;">Exception</span> <span style="font-weight: bold; font-style: italic;">e</span>) {
      <span style="font-weight: bold;">throw</span> <span style="font-weight: bold;">new</span> <span style="font-weight: bold; text-decoration: underline;">RuntimeException</span>(e);
   }
}
</pre>
</div>
<p>
This method basically takes a tuple array (as returned by native queries) and maps it against a provided POJO class by looking for a constructor that has the same number of fields and of the same type.
</p>
<p>
Then we can use convenient methods like:
</p>
<div class="org-src-container">
<pre class="src src-java"><span style="font-weight: bold;">public</span> <span style="font-weight: bold;">static</span> &lt;<span style="font-weight: bold; text-decoration: underline;">T</span>&gt; <span style="font-weight: bold; text-decoration: underline;">List</span>&lt;<span style="font-weight: bold; text-decoration: underline;">T</span>&gt; <span style="font-weight: bold;">map</span>(<span style="font-weight: bold; text-decoration: underline;">Class</span>&lt;<span style="font-weight: bold; text-decoration: underline;">T</span>&gt; <span style="font-weight: bold; font-style: italic;">type</span>, <span style="font-weight: bold; text-decoration: underline;">List</span>&lt;<span style="font-weight: bold; text-decoration: underline;">Object</span>[]&gt; <span style="font-weight: bold; font-style: italic;">records</span>){
   <span style="font-weight: bold; text-decoration: underline;">List</span>&lt;<span style="font-weight: bold; text-decoration: underline;">T</span>&gt; <span style="font-weight: bold; font-style: italic;">result</span> = <span style="font-weight: bold;">new</span> <span style="font-weight: bold; text-decoration: underline;">LinkedList</span>&lt;&gt;();
   <span style="font-weight: bold;">for</span>(<span style="font-weight: bold; text-decoration: underline;">Object</span>[] <span style="font-weight: bold; font-style: italic;">record</span> : records){
      result.add(map(type, record));
   }
   <span style="font-weight: bold;">return</span> result;
}

<span style="font-weight: bold;">public</span> <span style="font-weight: bold;">static</span> &lt;<span style="font-weight: bold; text-decoration: underline;">T</span>&gt; <span style="font-weight: bold; text-decoration: underline;">List</span>&lt;<span style="font-weight: bold; text-decoration: underline;">T</span>&gt; <span style="font-weight: bold;">getResultList</span>(<span style="font-weight: bold; text-decoration: underline;">Query</span> <span style="font-weight: bold; font-style: italic;">query</span>, <span style="font-weight: bold; text-decoration: underline;">Class</span>&lt;<span style="font-weight: bold; text-decoration: underline;">T</span>&gt; <span style="font-weight: bold; font-style: italic;">type</span>){
  <span style="font-weight: bold; text-decoration: underline;">@SuppressWarnings</span>(<span style="font-style: italic;">"unchecked"</span>)
  <span style="font-weight: bold; text-decoration: underline;">List</span>&lt;<span style="font-weight: bold; text-decoration: underline;">Object</span>[]&gt; <span style="font-weight: bold; font-style: italic;">records</span> = query.getResultList();
  <span style="font-weight: bold;">return</span> map(type, records);
}
</pre>
</div>
<p>
And we can simply use this technique as follows:
</p>
<div class="org-src-container">
<pre class="src src-java"><span style="font-weight: bold; text-decoration: underline;">Query</span> <span style="font-weight: bold; font-style: italic;">query</span> = em.createNativeQuery(<span style="font-style: italic;">"SELECT name,age FROM jedis_table"</span>);
<span style="font-weight: bold; text-decoration: underline;">List</span>&lt;<span style="font-weight: bold; text-decoration: underline;">Jedi</span>&gt; <span style="font-weight: bold; font-style: italic;">jedis</span> = getResultList(query, Jedi.<span style="font-weight: bold;">class</span>);
</pre>
</div>
</div>
</div>
<div class="outline-2" id="outline-container-org6c4ab73">
<h2 id="org6c4ab73">JPA 2.1 with @SqlResultSetMapping</h2>
<div class="outline-text-2" id="text-org6c4ab73">
<p>
With the arrival of JPA 2.1, we can use the @SqlResultSetMapping annotation to solve the problem.
</p>
<p>
We need to declare a result set mapping somewhere in a entity:
</p>
<div class="org-src-container">
<pre class="src src-java"><span style="font-weight: bold; text-decoration: underline;">@SqlResultSetMapping</span>(name=<span style="font-style: italic;">"JediResult"</span>, classes = {
    <span style="font-weight: bold; text-decoration: underline;">@ConstructorResult</span>(targetClass = Jedi.<span style="font-weight: bold;">class</span>, 
    columns = {<span style="font-weight: bold; text-decoration: underline;">@ColumnResult</span>(name=<span style="font-style: italic;">"name"</span>), <span style="font-weight: bold; text-decoration: underline;">@ColumnResult</span>(name=<span style="font-style: italic;">"age"</span>)})
})
</pre>
</div>
<p>
And then we simply do:
</p>
<div class="org-src-container">
<pre class="src src-java"><span style="font-weight: bold; text-decoration: underline;">Query</span> <span style="font-weight: bold; font-style: italic;">query</span> = em.createNativeQuery(<span style="font-style: italic;">"SELECT name,age FROM jedis_table"</span>, <span style="font-style: italic;">"JediResult"</span>);
<span style="font-weight: bold; text-decoration: underline;">@SuppressWarnings</span>(<span style="font-style: italic;">"unchecked"</span>)
<span style="font-weight: bold; text-decoration: underline;">List</span>&lt;<span style="font-weight: bold; text-decoration: underline;">Jedi</span>&gt; <span style="font-weight: bold; font-style: italic;">samples</span> = query.getResultList();
</pre>
</div>
<p>
Of course, in this case Jedi needs not to be an <b>mapped entity</b>. It can be a regular POJO.
</p>
<p>
<a href="https://stackoverflow.com/questions/28945146/jpa-entity-without-underlying-table" target="_blank" rel="noopener">More about ConstructorResult</a>
</p>
<blockquote>
<p>
<a href="https://stackoverflow.com/questions/25188939/mapping-nativequery-results-into-a-pojo" target="_blank" rel="noopener">https://stackoverflow.com/questions/25188939/mapping-nativequery-results-into-a-pojo</a>
</p>
</blockquote>
<p>
<span class="underline">但是 @SqlResultSetMapping 还是必须标注在 @Entity 实体上，否则将抛出 ResultSetMapping not found异常</span>
</p>
</div>
</div>
<div class="outline-2" id="outline-container-org8619079">
<h2 id="org8619079">Using XML Mapping</h2>
<div class="outline-text-2" id="text-org8619079">
<p>
I am one of those that find adding all these @SqlResultSetMapping pretty invasive in my entities, and I particularly dislike the definition of named queries within entities, so alternatively I do all this in the META-INF/orm.xml file:
</p>
<div class="org-src-container">
<pre class="src src-xml">
&lt;<span style="font-weight: bold;">named-native-query</span> <span style="font-weight: bold; font-style: italic;">name</span>=<span style="font-style: italic;">"GetAllJedi"</span> <span style="font-weight: bold; font-style: italic;">result-set-mapping</span>=<span style="font-style: italic;">"JediMapping"</span>&gt;
    &lt;<span style="font-weight: bold;">query</span>&gt;SELECT name,age FROM jedi_table&lt;/<span style="font-weight: bold;">query</span>&gt;
&lt;/<span style="font-weight: bold;">named-native-query</span>&gt;

&lt;<span style="font-weight: bold;">sql-result-set-mapping</span> <span style="font-weight: bold; font-style: italic;">name</span>=<span style="font-style: italic;">"JediMapping"</span>&gt;
        &lt;<span style="font-weight: bold;">constructor-result</span> <span style="font-weight: bold; font-style: italic;">target-class</span>=<span style="font-style: italic;">"org.answer.model.Jedi"</span>&gt;
            &lt;<span style="font-weight: bold;">column</span> <span style="font-weight: bold; font-style: italic;">name</span>=<span style="font-style: italic;">"name"</span> <span style="font-weight: bold; font-style: italic;">class</span>=<span style="font-style: italic;">"java.lang.String"</span>/&gt;
            &lt;<span style="font-weight: bold;">column</span> <span style="font-weight: bold; font-style: italic;">name</span>=<span style="font-style: italic;">"age"</span> <span style="font-weight: bold; font-style: italic;">class</span>=<span style="font-style: italic;">"java.lang.Integer"</span>/&gt;
        &lt;/<span style="font-weight: bold;">constructor-result</span>&gt;
    &lt;/<span style="font-weight: bold;">sql-result-set-mapping</span>&gt;
</pre>
</div>
</div>
</div>
<div class="outline-2" id="outline-container-org957bdfd">
<h2 id="org957bdfd">Transformers (Deprecated)</h2>
<div class="outline-text-2" id="text-org957bdfd">
<blockquote>
<p>
<a href="https://stackoverflow.com/questions/26831893/createnativequery-mapping-to-pojo-non-entity" target="_blank" rel="noopener">https://stackoverflow.com/questions/26831893/createnativequery-mapping-to-pojo-non-entity</a>
</p>
</blockquote>
<div class="org-src-container">
<pre class="src src-java">  <span style="font-weight: bold;">final</span> <span style="font-weight: bold; text-decoration: underline;">Query</span> <span style="font-weight: bold; font-style: italic;">query</span> = Sale.entityManager().createNativeQuery(...);

<span style="font-weight: bold; font-style: italic;">// </span><span style="font-weight: bold; font-style: italic;">access to internal Hibernate of EntityManager</span>
        query.unwrap(SQLQuery.<span style="font-weight: bold;">class</span>)
                .addScalar(<span style="font-style: italic;">"total"</span>, <span style="font-weight: bold; text-decoration: underline;">LongType</span>.INSTANCE)
                .addScalar(<span style="font-style: italic;">"amountOfSales"</span>, <span style="font-weight: bold; text-decoration: underline;">LongType</span>.INSTANCE)
                .addScalar(<span style="font-style: italic;">"amountOfProducts"</span>, <span style="font-weight: bold; text-decoration: underline;">LongType</span>.INSTANCE)
                .setResultTransformer(Transformers.aliasToBean(SaleStatsInfo.<span style="font-weight: bold;">class</span>));

        ...
        query.getSingleResult();
</pre>
</div>
<blockquote>
<p>
<a href="https://vladmihalcea.com/the-best-way-to-map-a-projection-query-to-a-dto-with-jpa-and-hibernate/" target="_blank" rel="noopener">https://vladmihalcea.com/the-best-way-to-map-a-projection-query-to-a-dto-with-jpa-and-hibernate/</a>
</p>
</blockquote>
<div class="org-src-container">
<pre class="src src-java"><span style="font-weight: bold; text-decoration: underline;">List</span>&lt;<span style="font-weight: bold; text-decoration: underline;">PostDTO</span>&gt; <span style="font-weight: bold; font-style: italic;">postDTOs</span> = entityManager
.createQuery(
    <span style="font-style: italic;">"select "</span> +
    <span style="font-style: italic;">"       p.id as id, "</span> +
    <span style="font-style: italic;">"       p.title as title "</span> +
    <span style="font-style: italic;">"from Post p "</span> +
    <span style="font-style: italic;">"where p.createdOn &gt; :fromTimestamp"</span>)
.setParameter( <span style="font-style: italic;">"fromTimestamp"</span>, Timestamp.from(
    LocalDateTime.of( 2016, 1, 1, 0, 0, 0 ).toInstant( <span style="font-weight: bold; text-decoration: underline;">ZoneOffset</span>.UTC ) ))
.unwrap( <span style="font-weight: bold; text-decoration: underline;">org</span>.<span style="font-weight: bold; text-decoration: underline;">hibernate</span>.<span style="font-weight: bold; text-decoration: underline;">query</span>.Query.<span style="font-weight: bold;">class</span> )
.setResultTransformer( Transformers.aliasToBean( PostDTO.<span style="font-weight: bold;">class</span> ) )
.getResultList();
</pre>
</div>
</div>
</div>
<div class="outline-2" id="outline-container-org1b16633">
<h2 id="org1b16633">CreateNativeQuery without type</h2>
<div class="outline-text-2" id="text-org1b16633">
<blockquote>
<p>
<a href="https://codereview.stackexchange.com/questions/1409/jpa-query-to-return-a-map" target="_blank" rel="noopener">https://codereview.stackexchange.com/questions/1409/jpa-query-to-return-a-map</a>
</p>
</blockquote>
<div class="org-src-container">
<pre class="src src-java"><span style="font-weight: bold;">public</span> <span style="font-weight: bold; text-decoration: underline;">Map</span>&lt;<span style="font-weight: bold; text-decoration: underline;">String</span>, <span style="font-weight: bold; text-decoration: underline;">String</span>&gt; <span style="font-weight: bold;">getAvailableBorderTypes</span>() {
   <span style="font-weight: bold; font-style: italic;">// </span><span style="font-weight: bold; font-style: italic;">create empty map to store results in. If we don't find results, an empty hashmap will be returned</span>
   <span style="font-weight: bold; text-decoration: underline;">Map</span>&lt;<span style="font-weight: bold; text-decoration: underline;">String</span>, <span style="font-weight: bold; text-decoration: underline;">String</span>&gt; <span style="font-weight: bold; font-style: italic;">results</span> = <span style="font-weight: bold;">new</span> <span style="font-weight: bold; text-decoration: underline;">HashMap</span>&lt;<span style="font-weight: bold; text-decoration: underline;">String</span>, <span style="font-weight: bold; text-decoration: underline;">String</span>&gt;();

   <span style="font-weight: bold; text-decoration: underline;">EntityManager</span> <span style="font-weight: bold; font-style: italic;">em</span> = entityManagerFactory.createEntityManager();

   <span style="font-weight: bold; font-style: italic;">// </span><span style="font-weight: bold; font-style: italic;">Construct and run query</span>
   <span style="font-weight: bold; text-decoration: underline;">String</span> <span style="font-weight: bold; font-style: italic;">jpaQuery</span> = <span style="font-style: italic;">"SELECT DISTINCT location.mftcc, location.name FROM Location location"</span>;
   <span style="font-weight: bold; text-decoration: underline;">List</span>&lt;<span style="font-weight: bold; text-decoration: underline;">Object</span>[]&gt; <span style="font-weight: bold; font-style: italic;">resultList</span> = em.createQuery(jpaQuery).getResultList();

   <span style="font-weight: bold; font-style: italic;">// </span><span style="font-weight: bold; font-style: italic;">Place results in map</span>
   <span style="font-weight: bold;">for</span> (<span style="font-weight: bold; text-decoration: underline;">Object</span>[] <span style="font-weight: bold; font-style: italic;">borderTypes</span>: resultList) {
      results.put((<span style="font-weight: bold; text-decoration: underline;">String</span>)borderTypes[0], (<span style="font-weight: bold; text-decoration: underline;">String</span>)borderTypes[1]);
   }

   <span style="font-weight: bold;">return</span> results;
}
</pre>
</div>
</div>
</div>
</div>
<div class="status" id="postamble">
<p class="author">Author: gdme1320</p>
<p class="validation"><a href="http://validator.w3.org/check?uri=referer" target="_blank" rel="noopener">Validate</a></p>
</div>

      
    </div>

    
      

    

    <footer class="article-footer">
      <a data-url="http://gdme1320.gitee.com/java/spring-jpa/native-query-to-pojo/" data-id="cl13eo7mu00euhjv4npfbuk0a" class="article-share-link">
        <i class="fa fa-share"></i> Share
      </a>
      
      

    </footer>
  </div>
  
    
<ul id="article-nav" class="nav nav-pills nav-justified">
  
  <li role="presentation">
    <a href="/java/spring/spring-validator/" id="article-nav-older" class="article-nav-link-wrap">
      <i class="fa fa-chevron-left pull-left"></i>
      <span class="article-nav-link-title">Spring Validator</span>
    </a>
  </li>
  
  
  <li role="presentation">
    <a href="/java/spring-security/oauth/" id="article-nav-newer" class="article-nav-link-wrap">
      <span class="article-nav-link-title">Spring Security中的OAuth2功能</span>
      <i class="fa fa-chevron-right pull-right"></i>
    </a>
  </li>
  
</ul>


  
</article>




        </div>
        <div class="col-sm-3 col-sm-offset-1 blog-sidebar">
          
  
  <div class="sidebar-module">
    <h4>Categories</h4>
    <ul class="sidebar-module-list"><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/categories/apps/">apps</a><span class="sidebar-module-list-count">1</span></li><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/categories/architecture/">architecture</a><span class="sidebar-module-list-count">2</span></li><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/categories/devops/">devops</a><span class="sidebar-module-list-count">10</span><ul class="sidebar-module-list-child"><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/categories/devops/kubectl/">kubectl</a><span class="sidebar-module-list-count">2</span></li><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/categories/devops/kubernetes/">kubernetes</a><span class="sidebar-module-list-count">3</span></li></ul></li><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/categories/dotnet/">dotnet</a><span class="sidebar-module-list-count">3</span><ul class="sidebar-module-list-child"><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/categories/dotnet/entityframework/">entityframework</a><span class="sidebar-module-list-count">1</span></li></ul></li><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/categories/elasticsearch/">elasticsearch</a><span class="sidebar-module-list-count">4</span></li><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/categories/emacs/">emacs</a><span class="sidebar-module-list-count">4</span><ul class="sidebar-module-list-child"><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/categories/emacs/org-mode/">org-mode</a><span class="sidebar-module-list-count">3</span></li></ul></li><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/categories/git/">git</a><span class="sidebar-module-list-count">2</span></li><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/categories/graphql/">graphql</a><span class="sidebar-module-list-count">1</span></li><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/categories/groovy/">groovy</a><span class="sidebar-module-list-count">1</span></li><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/categories/java/">java</a><span class="sidebar-module-list-count">52</span><ul class="sidebar-module-list-child"><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/categories/java/concurrent/">concurrent</a><span class="sidebar-module-list-count">4</span></li><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/categories/java/jackson/">jackson</a><span class="sidebar-module-list-count">2</span></li><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/categories/java/shiro/">shiro</a><span class="sidebar-module-list-count">1</span></li><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/categories/java/spring/">spring</a><span class="sidebar-module-list-count">11</span></li><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/categories/java/spring-amqp/">spring-amqp</a><span class="sidebar-module-list-count">5</span><ul class="sidebar-module-list-child"><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/categories/java/spring-amqp/spring-jpa/">spring-jpa</a><span class="sidebar-module-list-count">1</span></li></ul></li><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/categories/java/spring-jpa/">spring-jpa</a><span class="sidebar-module-list-count">10</span></li><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/categories/java/spring-security/">spring-security</a><span class="sidebar-module-list-count">3</span></li><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/categories/java/thymeleaf/">thymeleaf</a><span class="sidebar-module-list-count">2</span><ul class="sidebar-module-list-child"><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/categories/java/thymeleaf/maven/">maven</a><span class="sidebar-module-list-count">1</span></li></ul></li></ul></li><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/categories/jenkins/">jenkins</a><span class="sidebar-module-list-count">3</span></li><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/categories/journal/">journal</a><span class="sidebar-module-list-count">7</span></li><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/categories/js/">js</a><span class="sidebar-module-list-count">3</span></li><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/categories/linux/">linux</a><span class="sidebar-module-list-count">35</span><ul class="sidebar-module-list-child"><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/categories/linux/kde/">kde</a><span class="sidebar-module-list-count">2</span></li><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/categories/linux/kross/">kross</a><span class="sidebar-module-list-count">3</span><ul class="sidebar-module-list-child"><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/categories/linux/kross/ktorrent-scripts/">ktorrent-scripts</a><span class="sidebar-module-list-count">1</span></li></ul></li><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/categories/linux/shell/">shell</a><span class="sidebar-module-list-count">6</span></li><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/categories/linux/tcp/">tcp</a><span class="sidebar-module-list-count">1</span></li></ul></li><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/categories/lisp/">lisp</a><span class="sidebar-module-list-count">1</span></li><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/categories/mongodb/">mongodb</a><span class="sidebar-module-list-count">2</span></li><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/categories/mssql/">mssql</a><span class="sidebar-module-list-count">3</span></li><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/categories/mysql/">mysql</a><span class="sidebar-module-list-count">12</span></li><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/categories/nginx/">nginx</a><span class="sidebar-module-list-count">1</span></li><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/categories/node/">node</a><span class="sidebar-module-list-count">1</span></li><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/categories/postgresql/">postgresql</a><span class="sidebar-module-list-count">2</span><ul class="sidebar-module-list-child"><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/categories/postgresql/client/">client</a><span class="sidebar-module-list-count">1</span></li></ul></li><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/categories/python/">python</a><span class="sidebar-module-list-count">19</span></li><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/categories/regex/">regex</a><span class="sidebar-module-list-count">1</span></li><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/categories/rfc/">rfc</a><span class="sidebar-module-list-count">2</span></li><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/categories/vim/">vim</a><span class="sidebar-module-list-count">3</span></li><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/categories/windows/">windows</a><span class="sidebar-module-list-count">7</span></li></ul>
  </div>



  
  <div class="sidebar-module">
    <h4>Tags</h4>
    <ul class="sidebar-module-list"><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/tags/ReentrantLock/">ReentrantLock</a><span class="sidebar-module-list-count">1</span></li><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/tags/nohup/">nohup</a><span class="sidebar-module-list-count">1</span></li><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/tags/pandoc/">pandoc</a><span class="sidebar-module-list-count">1</span></li></ul>
  </div>



  
  <div class="sidebar-module">
    <h4>Tag Cloud</h4>
    <p class="tagcloud">
      <a href="/tags/ReentrantLock/" style="font-size: 10px;">ReentrantLock</a> <a href="/tags/nohup/" style="font-size: 10px;">nohup</a> <a href="/tags/pandoc/" style="font-size: 10px;">pandoc</a>
    </p>
  </div>


  
  <div class="sidebar-module">
    <h4>Archives</h4>
    <ul class="sidebar-module-list"><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/archives/2919/06/">June 2919</a><span class="sidebar-module-list-count">1</span></li><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/archives/2022/03/">March 2022</a><span class="sidebar-module-list-count">58</span></li><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/archives/2022/01/">January 2022</a><span class="sidebar-module-list-count">1</span></li><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/archives/2021/11/">November 2021</a><span class="sidebar-module-list-count">1</span></li><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/archives/2021/10/">October 2021</a><span class="sidebar-module-list-count">1</span></li><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/archives/2021/04/">April 2021</a><span class="sidebar-module-list-count">2</span></li><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/archives/2021/03/">March 2021</a><span class="sidebar-module-list-count">1</span></li><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/archives/2021/02/">February 2021</a><span class="sidebar-module-list-count">1</span></li><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/archives/2021/01/">January 2021</a><span class="sidebar-module-list-count">2</span></li><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/archives/2020/12/">December 2020</a><span class="sidebar-module-list-count">2</span></li><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/archives/2020/11/">November 2020</a><span class="sidebar-module-list-count">1</span></li><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/archives/2020/10/">October 2020</a><span class="sidebar-module-list-count">1</span></li><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/archives/2020/09/">September 2020</a><span class="sidebar-module-list-count">3</span></li><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/archives/2020/07/">July 2020</a><span class="sidebar-module-list-count">3</span></li><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/archives/2020/06/">June 2020</a><span class="sidebar-module-list-count">10</span></li><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/archives/2020/04/">April 2020</a><span class="sidebar-module-list-count">4</span></li><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/archives/2020/03/">March 2020</a><span class="sidebar-module-list-count">8</span></li><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/archives/2020/02/">February 2020</a><span class="sidebar-module-list-count">4</span></li><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/archives/2020/01/">January 2020</a><span class="sidebar-module-list-count">1</span></li><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/archives/2019/12/">December 2019</a><span class="sidebar-module-list-count">7</span></li><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/archives/2019/11/">November 2019</a><span class="sidebar-module-list-count">1</span></li><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/archives/2019/10/">October 2019</a><span class="sidebar-module-list-count">11</span></li><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/archives/2019/09/">September 2019</a><span class="sidebar-module-list-count">6</span></li><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/archives/2019/08/">August 2019</a><span class="sidebar-module-list-count">4</span></li><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/archives/2019/07/">July 2019</a><span class="sidebar-module-list-count">10</span></li><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/archives/2019/06/">June 2019</a><span class="sidebar-module-list-count">3</span></li><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/archives/2019/05/">May 2019</a><span class="sidebar-module-list-count">3</span></li><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/archives/2019/04/">April 2019</a><span class="sidebar-module-list-count">1</span></li><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/archives/2019/03/">March 2019</a><span class="sidebar-module-list-count">8</span></li><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/archives/2019/02/">February 2019</a><span class="sidebar-module-list-count">1</span></li><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/archives/2019/01/">January 2019</a><span class="sidebar-module-list-count">1</span></li><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/archives/2018/11/">November 2018</a><span class="sidebar-module-list-count">4</span></li><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/archives/2018/10/">October 2018</a><span class="sidebar-module-list-count">1</span></li><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/archives/2018/08/">August 2018</a><span class="sidebar-module-list-count">1</span></li><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/archives/2018/07/">July 2018</a><span class="sidebar-module-list-count">1</span></li><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/archives/2018/06/">June 2018</a><span class="sidebar-module-list-count">1</span></li><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/archives/2018/03/">March 2018</a><span class="sidebar-module-list-count">1</span></li><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/archives/2017/07/">July 2017</a><span class="sidebar-module-list-count">1</span></li><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/archives/2017/06/">June 2017</a><span class="sidebar-module-list-count">1</span></li><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/archives/2017/04/">April 2017</a><span class="sidebar-module-list-count">1</span></li><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/archives/2015/05/">May 2015</a><span class="sidebar-module-list-count">1</span></li><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/archives/1970/01/">January 1970</a><span class="sidebar-module-list-count">9</span></li></ul>
  </div>



  
  <div class="sidebar-module">
    <h4>Recents</h4>
    <ul class="sidebar-module-list">
      
        <li>
          <a href="/java/acessing-generic-types-at-runtime/">获取泛型类型</a>
        </li>
      
        <li>
          <a href="/linux/shell/bash_cgi/">Script for Shell Parsing Parameters</a>
        </li>
      
        <li>
          <a href="/linux/shell/shell-script/">Shell Script Getting Start</a>
        </li>
      
        <li>
          <a href="/linux/tcp/network-tcp-performance-turning-with-sysctl/">【翻译】Sysctl调节Linux网络性能</a>
        </li>
      
        <li>
          <a href="/java/concurrent/aqs-src/">AQS源码笔记</a>
        </li>
      
    </ul>
  </div>



        </div>
    </div>
  </div>
  <footer class="blog-footer">
  <div class="container">
    <div id="footer-info" class="inner">
      &copy; 2022 gdme1320<br>
      Powered by <a href="http://hexo.io/" target="_blank">Hexo</a>
    </div>
  </div>
</footer>

  

<!-- <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js" integrity="sha384-8gBf6Y4YYq7Jx97PIqmTwLPin4hxIzQw5aDmUg/DDhul9fFpbbLcLh3nTIIDJKhx" crossorigin="anonymous"></script> -->

<script src="/js/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js" integrity="sha384-0mSbJDEHialfmuBBQP6A4Qrprq5OVfW37PRR3j5ELqxss1yVqOtnepnHVP9aJ7xS" crossorigin="anonymous"></script>



<script src="/js/script.js"></script>

</body>
</html>
